home *** CD-ROM | disk | FTP | other *** search
/ Day Cry / Day Cry CD.bin / oh_towns / taropyon / he386 / ccisrc / sc55disp.c < prev    next >
Text File  |  1994-09-20  |  6KB  |  219 lines

  1. /*************************************************************************
  2. *
  3. *************************************************************************/
  4.  
  5. char    *Sc55dispFuncTbl[8] =
  6. {
  7.     "exSC55_msgSet"      , 
  8.     "exSC55_dotSet"      , 
  9.     "SC55_initDotBuffer" , 
  10.     "SC55_setDotBuffer"  , 
  11.     "exSC55_dotBuffer"   , 
  12.  
  13.     NULL
  14. };
  15.  
  16. int        SC55disp_macroInit( char *sqr )
  17. {
  18.     int            i;
  19.  
  20.     for ( i = 0; Sc55dispFuncTbl[i] != NULL; ++i )
  21.         MMac_extDefine( sqr, Sc55dispFuncTbl[i], Sc55dispFuncTbl[i], MMAC_ATT_EXT, NULL );
  22.     MMac_extDefine( sqr, "_SC55DISP_MACRO_DEFINED", "", MMAC_ATT_NORMAL , NULL );
  23.     return (NORMAL);
  24. }
  25.  
  26. int        _isSC55dot(int ch)
  27. {
  28.     ch &= 0xFF;
  29.     if ( ch == '0' || ch == ' ' )
  30.         return (0);
  31.     else
  32.         return (1);
  33. }
  34.  
  35. /*************************************************************************
  36. *    SC-55 ëtÅ╗âfâBâXâvâîâCé╔ò╢ÄÜé≡ò\Īé╖éΘ
  37. *-------------------------------------------------------------------------
  38. *    $exSC55_msgSet("âüâbâZü[âW")
  39. *************************************************************************/
  40.  
  41. int        exSC55_msgSet( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  42. {
  43.     int        len, siz;
  44.     char    *msg;
  45.  
  46.     if ( argc < 1 )
  47.     {
  48. _ERR:    MM_setErrMsg(sqr,"[SC-55] displayed letter error!");
  49.         return(ERR);
  50.     }
  51.     msg = argv[0];
  52.     len = strlen(msg);
  53.     if ( len < 1 || len > 32 )
  54.         goto _ERR;
  55.     return sc55_genMML( sqr, bufSiz, buf, 0x100000, len, msg );
  56. }
  57.  
  58.  
  59. /*************************************************************************
  60. *    SC-55 ëtÅ╗âfâBâXâvâîâCé╔âhâbâgò\Ī
  61. *-------------------------------------------------------------------------
  62. *    $exSC55_dotSet( l0, l1, l2, .. l15);
  63. *************************************************************************/
  64.  
  65. int        exSC55_dotSet( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  66. {
  67.     int                i, level;
  68.     char            *s, dat[128];
  69.     unsigned char    dot[256];
  70.  
  71.     if ( argc < 16 )
  72.     {
  73. _ERR:    MM_setErrMsg(sqr,"[SC-55] displayed dot data error!");
  74.         return(ERR);
  75.     }
  76.  
  77.     for ( level = 0; level < 16; ++level )
  78.     {
  79.         s = argv[level];
  80.         while ( isspace(*s) )
  81.             ++s;
  82.         if ( strlen(s) < 16 )
  83.             goto _ERR;
  84.  
  85.         for ( i = 0; i < 16; ++i )
  86.         {
  87.             dot[(level*16)+i] = _isSC55dot(*s);
  88.             ++s;
  89.         }
  90.     }
  91.  
  92.     for ( i = 0; i < 16; ++i )
  93.     {
  94.         dat[i   ] = (dot[i*16+ 0]<<4) + (dot[i*16+ 1]<<3) + (dot[i*16+ 2]<<2) + (dot[i*16+ 3]<<1) + (dot[i*16+ 4]);
  95.         dat[i+16] = (dot[i*16+ 5]<<4) + (dot[i*16+ 6]<<3) + (dot[i*16+ 7]<<2) + (dot[i*16+ 8]<<1) + (dot[i*16+ 9]);
  96.         dat[i+32] = (dot[i*16+10]<<4) + (dot[i*16+11]<<3) + (dot[i*16+12]<<2) + (dot[i*16+13]<<1) + (dot[i*16+14]);
  97.         dat[i+48] = (dot[i*16+15]<<4);
  98.     }
  99.     return sc55_genMML( sqr, bufSiz, buf, 0x100100, 64, dat );
  100. }
  101.  
  102. int                    Sc55dotBufXs = 0;
  103. int                    Sc55dotBufYs = 0;
  104. unsigned char       *Sc55dotBuffer = NULL;
  105.  
  106. /*************************************************************************
  107. *    ÄwÆΦé╠æσé½é│é╠âhâbâgâoâbâtâ@é≡ùpê╙é╖éΘ
  108. *-------------------------------------------------------------------------
  109. *    $SC55_initDotBuffer(x,y)
  110. *************************************************************************/
  111.  
  112. int        SC55_initDotBuffer( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  113. {
  114.     int        x, y;
  115.  
  116.     if ( argc < 2 )
  117.     {
  118. _ERR:    MM_setErrMsg(sqr,"\x22SC55_initDotBuffer()\x22 parameter error!");
  119.         return(ERR);
  120.     }
  121.     x = atoi(argv[0]);
  122.     y = atoi(argv[1]);
  123.     if ( x < 16 || y < 16 )
  124.         goto _ERR;
  125.     Sc55dotBufXs = x;
  126.     Sc55dotBufYs = y;
  127.     if ( (Sc55dotBuffer = calloc(Sc55dotBufXs*Sc55dotBufYs,1)) == NULL )
  128.         goto _ERR;
  129.     return (0);
  130. }
  131.  
  132. /*************************************************************************
  133. *    âhâbâgâoâbâtâ@é╠ÄwÆΦê╩Æué╔âhâbâgâfü[â^é≡É▌ÆΦé╖éΘ
  134. *-------------------------------------------------------------------------
  135. *    $SC55_setDotBuffer(line,"dat")
  136. *************************************************************************/
  137.  
  138. int        SC55_setDotBuffer( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  139. {
  140.     int        x, y;
  141.     char    *s;
  142.  
  143.     if ( Sc55dotBuffer == NULL || Sc55dotBufXs < 16 || Sc55dotBufYs < 16 )
  144.     {
  145.         MM_setErrMsg(sqr,"SC-55 dot buffer not initiarize!");
  146.         return(ERR);
  147.     }
  148.     if ( argc < 2 )
  149.     {
  150. _ERR:    MM_setErrMsg(sqr,"\x22SC55_setDotBuffer()\x22 parameter error!");
  151.         return(ERR);
  152.     }
  153.     y = atoi(argv[0]);
  154.     s = argv[1];
  155.     while ( isspace(*s) )
  156.         ++s;
  157.     if ( *s )
  158.     {
  159.         for ( x = 0; x < Sc55dotBufXs; ++x )
  160.         {
  161.             Sc55dotBuffer[y * Sc55dotBufXs + x] = _isSC55dot(*s);
  162.             ++s;
  163.             if ( *s == '\0' )
  164.                 break;
  165.         }
  166.     }
  167.     return (0);
  168. }
  169.  
  170.  
  171. /*************************************************************************
  172. *    âhâbâgâoâbâtâ@Æåé╠ÄwÆΦê╩Æué⌐éτ16ü~16âhâbâgò¬é≡ò\Ī
  173. *-------------------------------------------------------------------------
  174. *    $exSC55_dotBuffer(x,y)
  175. *************************************************************************/
  176.  
  177. int        exSC55_dotBuffer( char *sqr, size_t bufSiz, char *buf, int argc, char **argv )
  178. {
  179.     int                y, x0, y0;
  180.     char            *s, dat[128];
  181.     unsigned char    dot[256];
  182.  
  183.     if ( Sc55dotBuffer == NULL || Sc55dotBufXs < 16 || Sc55dotBufYs < 16 )
  184.     {
  185.         MM_setErrMsg(sqr,"SC-55 dot buffer not initiarize!");
  186.         return(ERR);
  187.     }
  188.     if ( argc < 2 )
  189.     {
  190. _ERR:    MM_setErrMsg(sqr,"\x22exSC55_dotBuffer()\x22 parameter error!");
  191.         return(ERR);
  192.     }
  193.     x0 = atoi(argv[0]);
  194.     y0 = atoi(argv[1]);
  195.     if ( x0 < 0 || x0 + 15 > Sc55dotBufXs || y0 < 0 || y0 + 15 > Sc55dotBufYs )
  196.         goto _ERR;
  197.  
  198.     for ( y = 0; y < 16; ++y, ++y0 )
  199.     {
  200.         dat[y   ] = (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 0]<<4)
  201.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 1]<<3)
  202.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 2]<<2)
  203.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 3]<<1)
  204.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 4]);
  205.         dat[y+16] = (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 5]<<4)
  206.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 6]<<3)
  207.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 7]<<2)
  208.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 8]<<1)
  209.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+ 9]);
  210.         dat[y+32] = (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+10]<<4)
  211.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+11]<<3)
  212.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+12]<<2)
  213.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+13]<<1)
  214.                   + (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+14]);
  215.         dat[y+48] = (Sc55dotBuffer[(y0*Sc55dotBufXs)+x0+15]<<4);
  216.     }
  217.     return sc55_genMML( sqr, bufSiz, buf, 0x100100, 64, dat );
  218. }
  219.